package juc.mythread.threadmonitor;

/**
 * @ClassName testTerminated
 * @PackageName mythread.threadUsed
 * @projectName myThread
 * @Description 
 * @Author games
 * @Date 2025/8/25 下午1:41
 * @Version 1.0
 */
/*
* volatile
* */
public class testTerminated {
    public static class MonitorThread extends Thread {
        // 在监控线程中添加一个volatile类型的标志变量，用于标识是否需要终止线程的执行
        private volatile boolean terminated = false;

        public void run() {
            while (!terminated) {
                // 执行监控操作
                System.out.println("监控线程正在执行监控操作...");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            // 执行清理操作
            releaseResources();
        }

        public void terminate() {
            terminated = true;
        }

        private void releaseResources() {
            // 释放资源和进行必要的清理工作...
            System.out.println("监控线程正在释放资源和进行必要的清理工作...");
        }
    }

    public static void main(String[] args) throws InterruptedException {
        MonitorThread thread = new MonitorThread();
        thread.start(); // 启动监控线程
        Thread.sleep(10000); // 主线程休眠10秒，模拟主线程的其他操作
        thread.terminate(); // 直接停止监控操作
        Thread.sleep(10002); // 主线程再次休眠100秒，等待监控线程完成清理工作
    }

}
